﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
using Model.Models;
using Persistence;
namespace Services
{
    /// <summary>
    /// Gerencia todas as regras de negócio da entidade Segmento
    /// </summary>
    public class GerenciadorSegmento
    {
        private IUnitOfWork unitOfWork;
        private bool shared;

        public GerenciadorSegmento()
        {
            this.unitOfWork = new UnitOfWork();
            shared = false;
        }

        internal GerenciadorSegmento(IUnitOfWork unitOfword)
        {
            this.unitOfWork = unitOfword;
            shared = true;
        }

        public int Inserir(Segmento segmentoModel)
        {
            TB_SEGMENTO segmentoE = new TB_SEGMENTO();
            Atribuir(segmentoModel, segmentoE);
            unitOfWork.RepositorioSegmento.Inserir(segmentoE);
            unitOfWork.Commit(shared);
            return segmentoE.id_Segmento;

        }


        public void Editar(Segmento segmentoModel)
        {
            TB_SEGMENTO segmentoE = new TB_SEGMENTO();
            Atribuir(segmentoModel, segmentoE);
            unitOfWork.RepositorioSegmento.Editar(segmentoE);
            unitOfWork.Commit(shared);
        }

        public void Remover(int idSegmento)
        {
            unitOfWork.RepositorioSegmento.Remover(segmento => segmento.id_Segmento.Equals(idSegmento));
            unitOfWork.Commit(shared);

        }

        private IQueryable<Segmento> GetQuery()
        {
            IQueryable<TB_SEGMENTO> tb_segmento = unitOfWork.RepositorioSegmento.GetQueryable();
            var query = from segmento in tb_segmento
                        select new Segmento
                        {
                            Id_Segmento = segmento.id_Segmento,
                            Id_Empresa = segmento.id_Empresa,
                            Descricao = segmento.descricao,
                            NomeEmpresa = segmento.TB_EMPRESA.nome
                        };
            return query;
        }

        public IEnumerable<Segmento> ObterTodos()
        {
            return GetQuery();
        }

        public Segmento Obter(int idSegmento)
        {
            IEnumerable<Segmento> segmentoEs = GetQuery().Where(segmentoModel => segmentoModel.Id_Segmento.Equals(idSegmento));
            return segmentoEs.ElementAtOrDefault(0);
        }


        private void Atribuir(Segmento segmentoModel, TB_SEGMENTO segmentoE)
        {
            segmentoE.id_Segmento = segmentoModel.Id_Segmento;
            segmentoE.id_Empresa = segmentoModel.Id_Empresa;
            segmentoE.descricao = segmentoModel.Descricao;
            
        }
    }
}